home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1990: Discy Business / Discy Business.2mg / DEV.CD / TOOLS / SAMPLES / HP / HP.ASM / FONT.ASM < prev    next >
Encoding:
Assembly Source File  |  1989-03-24  |  9.6 KB  |  369 lines  |  [B0] Apple IIgs Source Code (0x0003)

  1.  
  2. ******************************************************************************
  3. *                                                                            *
  4. *         HodgePodge:  An example Apple IIGS Desktop application             *
  5. *                                                                            *
  6. *         Written in 65816 Assembler by the Apple IIGS Tools Team            *
  7. *  Modified by Ben Koning for "Programmer's Introduction to the Apple IIGS"  *
  8. *                                                                            *
  9. *             Copyright (c) 1986-87 by Apple Computer, Inc.                  *
  10. *                                                                            *
  11. *   ----------------------------------------------------------------------   *
  12. *                                                                            *
  13. * ASM65816 Code file "FONT.ASM" -- Choose font; display font window contents *
  14. *                                                                            *
  15. ******************************************************************************
  16.  
  17.  
  18.  
  19. ***************************************************************
  20. *
  21. * FontData
  22. *
  23. ****************************************************************
  24. FontDATA  DATA
  25.  
  26. FontWinPtr  ds 4
  27.  
  28. DesiredFont    dc i4'$0800FFFE'         ; System Font size 8
  29. MonoFlag       dc i2'0'                 ; start out showing proportional
  30.  
  31. CurFontInfo    anop
  32. CFAscent       ds 2
  33. CFDescent      ds 2
  34. CFMaxWid       ds 2
  35. CFLeading      ds 2
  36.  
  37.  
  38. CurHeight      ds 2
  39. LineCounter    ds 2
  40.  
  41. CurPos         ds 4
  42.  
  43.  
  44. NumLines       equ 13
  45.  
  46. LineTable      dc i'Line0,Line1,Line2,Line3,Line4'
  47.                dc i'Line5,Line6,Line7,Line8,Line9'
  48.                dc i'Line10,Line11,Line12,Line12,Line12'
  49.  
  50.  
  51. Line0  ds 30                            ; max name len is 25 + 1 for length
  52. ;                                       ; and 4 for size info
  53. Line1  str ''
  54. Line2  str 'The quick brown fox jumped over the lazy dog.'
  55. Line3  str 'She sells sea shells down by the sea shore.'
  56. Line4  str ''
  57.  
  58. Line5    dc h'20'
  59.   dc h'00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F'
  60.   dc h'10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F'
  61. Line6  dc h'20'
  62.   dc h'20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F'
  63.   dc h'30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F'
  64. Line7  dc h'20'
  65.   dc h'40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F'
  66.   dc h'50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F'
  67. Line8  dc h'20'
  68.   dc h'60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F'
  69.   dc h'70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F'
  70. Line9  dc h'20'
  71.   dc h'80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F'
  72.   dc h'90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F'
  73. Line10 dc h'20'
  74.   dc h'A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF'
  75.   dc h'B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF'
  76. Line11 dc h'20'
  77.   dc h'C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF'
  78.   dc h'D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF'
  79. Line12 dc h'20'
  80.   dc h'E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF'
  81.   dc h'F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF'
  82.    END
  83.  
  84. ****************************************************************
  85. *
  86. * DoChooseFont
  87. *
  88. ****************************************************************
  89. DoChooseFont START
  90.          using GlobalDATA
  91.          using FontDATA
  92.  
  93.          PushLong #0
  94.          _GetPort
  95.  
  96.          PushLong #TempPort
  97.          _OpenPort
  98.  
  99.          PushLong #0                    ; space for result
  100.          PushLong DesiredFont
  101.          PushWord #0
  102.          _ChooseFont
  103.  
  104.          lda 1,s
  105.          ora 3,s
  106.          bne ItChanged
  107.  
  108.          pla                            ; ChooseFont returned a 0000, so the
  109.          pla                            ; font hasn't changed
  110.  
  111.          PushLong #TempPort
  112.          _ClosePort
  113.  
  114.          _SetPort
  115.  
  116.          sec                            ; bad return
  117.          rts
  118.  
  119.  
  120.  
  121. ItChanged anop
  122.          pla
  123.          sta DesiredFont
  124.          pla
  125.          sta DesiredFont+2
  126.  
  127.          pushword #0                    ;space for result
  128.          PushWord DesiredFont
  129.          PushLong #R_Fname
  130.          _GetFamInfo
  131.          pla                            ;ignore result
  132.  
  133.          lda DesiredFont+3              ; get font size in a reg
  134.          and #$00FF
  135.          pha
  136.          lda #^R_FName                  ; high word of pointer to name
  137.          pha
  138.          lda R_FName
  139.          and #$00FF
  140.          inc a
  141.          adc #R_FName
  142.          pha                            ; low word of pointer
  143.          PushWord #4                    ; output length
  144.          PushWord #0                    ; not signed
  145.          _Int2Dec
  146.  
  147.          lda R_FName                    ; bump the length
  148.          inc a
  149.          inc a
  150.          inc a
  151.          inc a
  152.          sta R_FName
  153.  
  154.          PushLong #TempPort
  155.          _ClosePort
  156.  
  157.          _SetPort
  158.  
  159.          clc                            ;good return
  160.          rts
  161.  
  162. TempPort ds $AA                         ; size of graph port
  163.  
  164.    END
  165.  
  166. ****************************************************************
  167. *
  168. * DispFontWindow
  169. *
  170. ****************************************************************
  171. DispFontWindow START
  172.          using FontDATA
  173.          using GlobalData
  174.    
  175. **********
  176. *
  177. *  get my own zero page
  178. *
  179. **********
  180.          phb
  181.          phk
  182.          plb
  183.  
  184.          phd
  185.          lda MyZP
  186.          tcd
  187.  
  188. **********
  189. *
  190. * get the correct window port (got here from within taskmaster)
  191. *
  192. **********
  193.  
  194.          pushlong #0
  195.          _GetPort
  196.          plx
  197.          ply                            ;get result for pushing in a sec.
  198.  
  199.          PUSHLONG #0                    ;space for result
  200.          phy
  201.          phx                            ; saved the port here
  202.          _GetWRefCon
  203.  
  204.          pla
  205.          sta Temphandle
  206.          plx
  207.          stx TempHandle+2
  208.  
  209.          jsr Deref                      ; de reference
  210.          sta 0
  211.          stx 2
  212.  
  213.          ldy #oFontID+2                 ; get the font ID
  214.          lda [0],y
  215.          tax
  216.          dey
  217.          dey
  218.          lda [0],y
  219.  
  220.          jsl ShowFont
  221.  
  222.          lda TempHandle
  223.          ldx TempHandle+2
  224.          jsr Unlock
  225.        
  226.          pld
  227.          plb
  228.    
  229.          rtl
  230.  
  231.          END
  232.  
  233.  
  234. ****************************************************************
  235. *
  236. * ShowFont
  237. *
  238. * Common routine to actually draw the contents of the window.
  239. * This routine is called with the font to install in the
  240. * in the A & X registers.
  241. *
  242. ****************************************************************
  243. ShowFont START
  244.          using GlobalData
  245.          using FontData
  246.  
  247.          phx                            ; save copy on stack
  248.          pha
  249.  
  250.          phx                            ; install the font
  251.          pha
  252.          PushWord #0     
  253.          _InstallFont
  254.  
  255.          PushLong #CurFontInfo          ; Get its size info
  256.          _GetFontInfo
  257.    
  258.          stz LineCounter                ; zero the line counter
  259.    
  260.          clc                            ; calculate the line separation
  261.          lda CFAscent
  262.          adc CFDescent
  263.          adc CFLeading
  264.          sta CurHeight
  265.    
  266.          PushWord #0                    ; start the pen position at 0,0
  267.          PushWord #0
  268.          _MoveTo
  269.  
  270.          plx                            ; get fontid off stack
  271.  
  272.          pushword #0                    ; space for result
  273.          phx                            ; family number was in x
  274.          PushLong #Line0
  275.          _GetFamInfo
  276.          pla                            ; ignore result
  277.  
  278.          pla                            ; high word of font id
  279.          xba                            ; size in high byte
  280.          and #$00FF
  281.          pha
  282.          lda #^Line0                     ; high word of pointer to name
  283.          pha
  284.          lda Line0
  285.          and #$00FF
  286.          inc a
  287.          adc #Line0
  288.          pha                            ; low word of pointer
  289.          PushWord #4                    ; output length
  290.          PushWord #0                    ; not signed
  291.          _Int2Dec
  292.  
  293.          lda Line0                      ; bump the length
  294.          inc a
  295.          inc a
  296.          inc a
  297.          inc a
  298.          sta Line0
  299.  
  300.          PushWord #0                    ; save prev set mono/pro flag
  301.          _GetFontFlags
  302.  
  303.          ldy #oFlag                     ; keep the result on the stack while
  304.          lda [0],y                      ; we set it to what we want (as
  305.          lsr a                          ; defined by its window type set up
  306.          and #$0001                     ; when we opened this window)
  307.          pha
  308.          _SetFontFlags
  309.       
  310. LineLoop anop
  311.  
  312.          PushLong #CurPos               ; get the current position
  313.          _GetPen
  314.    
  315.  
  316.          PushWord #5                     ; reset x position
  317.          lda CurPos
  318.          clc
  319.          adc CurHeight
  320.          pha                            ; and y position
  321.          _MoveTo
  322.  
  323.          lda LineCounter                ; draw current line
  324.          asl a
  325.          tax
  326.          phk
  327.          phk
  328.          lda 1,s
  329.          and #$00FF
  330.          sta 1,s
  331.    
  332.          lda LineTable,x
  333.          pha
  334.          _DrawString
  335.    
  336.          inc LineCounter                ; bump current line 
  337.          lda LineCounter
  338.          cmp #NumLines
  339.          bcc LineLoop
  340.  
  341.          _SetFontFlags                  ; restore from saved position
  342.  
  343.          rtl
  344.          END
  345.  
  346. ****************************************************************
  347. *
  348. * doSetMono
  349. *
  350. ****************************************************************
  351.  
  352. doSetMono      START
  353.                using FontData
  354.                using MenuData
  355.  
  356.                lda MonoFlag
  357.                eor #$02
  358.                sta MonoFlag
  359.  
  360.                beq ChangeToMono         ;Change message to show effect in
  361.                PushLong #PropStr        ;NEXT selection of this menu item
  362.                bra PushID
  363. ChangeToMono   PushLong #MonoStr
  364. PushID         PushWord #MonoID
  365.                _SetMItem
  366.                rts
  367.  
  368.                END
  369.